﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
// Copyright (C) 2022 kingerrobot
// 版权所有。 
//
// 文件名：BRcsEquipScanner
// 文件功能描述：
//
// 创建者：名字 (zzl)
// 时间：2022/1/27 16:32:45
//
// 修改人：
// 时间：
// 修改说明：
// 版本：V1.0.0
//----------------------------------------------------------------*/
#endregion
namespace KingerRobot.MexicoSailunMDC.SpiService;

internal class BRcsEquipScanner : IRcsEquipScanner
{

    private readonly static IWcsEquipLoc _WcsEquipLoc = new BWcsEquipLoc();
    public PORcsEquipScanner GetRcsEquipScannerByLocId(long locId)
    {
        // 设备表扩展字段，所以需要先通过位置查找设备。
        var id = _WcsEquipLoc.GetEquipIdByLocId(locId);
        var result = GetRcsEquipScannerById(id);
        return result;
    }
    public PORcsEquipScanner GetRcsEquipScannerById(long id)
    {
        var db = Db.Default;
        var result = db.RcsEquipScanners
            .Where(t => t.Id == id && t.UseFlag == 1)
            .AsNoTracking()
            .FirstOrDefault();
        return result;
    }

    public long GetDirectDeliveryEquipId()
    {
        var db = Db.Default; 
        var result = db.RcsEquipScanners
            .Where(t => t.IsDirectDelivery == 1 && t.UseFlag == 1).OrderBy(t=>t.DirectDeliveryTime)
            .FirstOrDefault()?.Id ?? 0;
        return result;
    }

    public long UpdateDirectDeliveryTime(long id)
    {
        var db = Db.Default;
        var result = db.RcsEquipScanners
            .Where(t => t.Id == id).Update( new PORcsEquipScanner
            {
                DirectDeliveryTime = DateTime.Now
            });
        return db.SaveChanges();
    }
    public int UpdateRcsEquipScannerLastInfo(long id, long materialId, long targetId)
    { 
        var db = Db.Default;
        var result = GetRcsEquipScannerById(id);
        if(result == null)
        {
            return 0;
        }

        var lastSign = 1;
        var totalNum = result.TotalNum + 1;
        var dateTime = DateTimeHelper.GetNowTime();
        if(materialId == result.LastMaterial && result.LastSign == 1)
        {
            lastSign++;
        }
        var num = db.RcsEquipScanners
            .Where(t => t.Id == id)
            .Update( new PORcsEquipScanner
        {
            LastSign = lastSign,
            LastMaterial = materialId,
            LastTime = dateTime,
            LastTargetLoc = targetId,
            TotalNum = totalNum
            });
        return db.SaveChanges();
    }
}